package ar.com.gestion.vistas;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import ar.com.gestion.GestionUtils;
import ar.com.gestion.bo.UsuariosBO;
import ar.com.gestion.bo.VentasBO;
import ar.com.gestion.componentes.CustomComboVentasModel;
import ar.com.gestion.dominio.Cliente;
import ar.com.gestion.dominio.Venta;
import ar.com.gestion.listeners.PagarCuotaListener;
import ar.com.gestion.springcontext.SpringContext;
import ar.com.gestion.usuarios.CancelarListener;

public class ViewPagarCuotas extends JFrame {

	private UsuariosBO usuariosBO = (UsuariosBO) SpringContext.getContext()
			.getBean("usuariosBO");

	private VentasBO ventasBO = (VentasBO) SpringContext.getContext().getBean(
			"ventasBO");

	private JTextField montoApagar;
	private JButton pagar, cancelar;

	private JLabel deuda = new JLabel("0");
	private JLabel cuotasRestantes = new JLabel("0");
	private JLabel montoCuotas = new JLabel("0");

	private JComboBox<Integer> comboCuotasAPagar = new JComboBox<Integer>();

	private List<Venta> obtenerVentasConDeuda;

	private JComboBox<Venta> comboCliente = new JComboBox<Venta>();

	private CustomComboVentasModel customComboModel=new CustomComboVentasModel();;
	
	public ViewPagarCuotas() {
		montoApagar = new JTextField();
		montoApagar.setEditable(false);
		pagar = new JButton("Pagar");
		cancelar = new JButton("Cancelar");

		obtenerVentasConDeuda = ventasBO.obtenerDeudores();


			DefaultComboBoxModel<Venta> comboModel = new DefaultComboBoxModel<Venta>(); 

			comboModel.addElement(null);
			
			for (Venta venta : obtenerVentasConDeuda) {
				comboModel.addElement(venta);
			}
			
		if (obtenerVentasConDeuda.size() > 0) {
			comboCliente.setModel(comboModel);
			
		}

		comboCliente.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				Venta venta = (Venta) comboCliente.getSelectedItem();
				
				if (venta != null){
				int cantPagos = venta.getPagos().size();

				deuda.setText(String.valueOf(venta.getSaldo() / cantPagos));
				cuotasRestantes.setText(String.valueOf(venta.getCuotas()
						- cantPagos));
				montoCuotas.setText(String.valueOf(venta.getSaldo()
						/ venta.getCuotas()));

				Integer[] arrayCuotas = new Integer[venta.getCuotas()];
				comboCuotasAPagar.removeAllItems();
				for (int i = 1; i < arrayCuotas.length; i++) {
					comboCuotasAPagar.addItem(i);
				}

				}else {
					
					deuda.setText("");
					cuotasRestantes.setText("");
					montoCuotas.setText("");
					montoApagar.setText("");
					
				}


			}
		});
		
		comboCuotasAPagar.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				Integer cantCuota =(Integer) comboCuotasAPagar.getSelectedItem();
				if (cantCuota != null){
				float montoCuota = Float.parseFloat(montoCuotas.getText());
				montoApagar.setText(String.valueOf( montoCuota* cantCuota    ));
				}
				
				
			}
		});

		setLayout(new GridLayout(8, 2));
		add(new JLabel("Seleccione cliente:"));
		add(comboCliente);
		add(new JLabel("Deuda"));
		add(deuda);
		add(new JLabel("Cuotas Restantes"));
		add(cuotasRestantes);
		add(new JLabel("Monto Cuotas"));
		add(montoCuotas);
		add(comboCuotasAPagar);
		add(new JLabel(""));
		add(new JLabel("Monto a pagar"));
		add(montoApagar);
		add(pagar);
		add(cancelar);
		setSize(255, 218);
		setVisible(true);
		GestionUtils.obtenerUbicacionEnPantalla(this);
		
		pagar.addActionListener(new PagarCuotaListener(this));
		cancelar.addActionListener(new CancelarListener(this));

	}


	public Venta buscarVentaDelCliente(Cliente cliente) {
		for (Venta venta : obtenerVentasConDeuda) {

			if (venta.getCliente().getIdCliente() == cliente.getIdCliente()) {
				return venta;
			}

		}

		return null;

	}


	public UsuariosBO getUsuariosBO() {
		return usuariosBO;
	}


	public void setUsuariosBO(UsuariosBO usuariosBO) {
		this.usuariosBO = usuariosBO;
	}


	public VentasBO getVentasBO() {
		return ventasBO;
	}


	public void setVentasBO(VentasBO ventasBO) {
		this.ventasBO = ventasBO;
	}


	public JTextField getMontoApagar() {
		return montoApagar;
	}


	public void setMontoApagar(JTextField montoApagar) {
		this.montoApagar = montoApagar;
	}


	public JButton getPagar() {
		return pagar;
	}


	public void setPagar(JButton pagar) {
		this.pagar = pagar;
	}


	public JButton getCancelar() {
		return cancelar;
	}


	public void setCancelar(JButton cancelar) {
		this.cancelar = cancelar;
	}


	public JLabel getDeuda() {
		return deuda;
	}


	public void setDeuda(JLabel deuda) {
		this.deuda = deuda;
	}


	public JLabel getCuotasRestantes() {
		return cuotasRestantes;
	}


	public void setCuotasRestantes(JLabel cuotasRestantes) {
		this.cuotasRestantes = cuotasRestantes;
	}


	public JLabel getMontoCuotas() {
		return montoCuotas;
	}


	public void setMontoCuotas(JLabel montoCuotas) {
		this.montoCuotas = montoCuotas;
	}


	public JComboBox<Integer> getComboCuotasAPagar() {
		return comboCuotasAPagar;
	}


	public void setComboCuotasAPagar(JComboBox<Integer> comboCuotasAPagar) {
		this.comboCuotasAPagar = comboCuotasAPagar;
	}


	public List<Venta> getObtenerVentasConDeuda() {
		return obtenerVentasConDeuda;
	}


	public void setObtenerVentasConDeuda(List<Venta> obtenerVentasConDeuda) {
		this.obtenerVentasConDeuda = obtenerVentasConDeuda;
	}


	public JComboBox<Venta> getComboCliente() {
		return comboCliente;
	}


	public void setComboCliente(JComboBox<Venta> comboCliente) {
		this.comboCliente = comboCliente;
	}


	public CustomComboVentasModel getCustomComboModel() {
		return customComboModel;
	}


	public void setCustomComboModel(CustomComboVentasModel customComboModel) {
		this.customComboModel = customComboModel;
	}

	
	
}
